"""
上下文管理器
"""

from contextlib import contextmanager

from components.global_param import request_ctx


@contextmanager
def stash_request_ctx(ctx_data: dict):
    """
    上下文管理器，用于在线程间传递请求上下文

    Args:
        ctx_data: 要设置的上下文数据，默认为当前上下文的深拷贝
    """

    # 保存当前上下文并设置新上下文
    token = request_ctx.set(ctx_data)

    try:
        yield

    finally:
        # 恢复之前的上下文
        request_ctx.reset(token)
